// 1903 [模拟/错误]手机九宫格输入法
// https://oj.rnd.huawei.com/problems/1903/details map错误初始化,QT执行失败
// map<char, string> mapLetter = {
// {'0', " "},
// {'1', ",."},
// {'2', "abc"},
// {'3', "def"},
// {'4', "ghi"},
// {'5', "jkl"},
// {'6', "mno"},
// {'7', "pqrs"},
// {'8', "tuv"},
// {'9', "wxyz"}
// };
// mapLetter.insert(make_pair('0', " "   );
// mapLetter.insert(make_pair('1', ",."  );
// mapLetter.insert(make_pair('2', "abc" );
// mapLetter.insert(make_pair('3', "def" );
// mapLetter.insert(make_pair('4', "ghi" );
// mapLetter.insert(make_pair('5', "jkl" );
// mapLetter.insert(make_pair('6', "mno" );
// mapLetter.insert(make_pair('7', "pqrs");
// mapLetter.insert(make_pair('8', "tuv" );
// mapLetter.insert(make_pair('9', "wxyz");

//  # 表示在“数字状态”与“英文状态”之间切换。
//  / 停顿符，表示用户有意停顿。
// 键 0，则对应为单字符（空格），摁几次显示几个该字符
// 键非0，则对应为多个字符，可通过连续多次快速摁该键循环选择对应字符：
// 以英文状态下的数字键 2 为例，摁1次为 a ，2次为 b ，3次为 c ，4次又循环回 a 。
// 若连续多次摁键循环选择时被其它键或停顿中断，则输出所选择的字符。
// 输入 #22/23044444411
// 输出 bad i.

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 * Description: 上机编程认证
 * Note: 缺省代码仅供参考，可自行决定使用、修改或删除
 */
#include <algorithm>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using namespace std;

class Solution {
 public:
  const string GetResult(const string &input) {
    bool numberMode = true;
    string result;
    vector<string> keyboard = {" ",   ",.",  "abc",  "def", "ghi",
                               "jkl", "mno", "pqrs", "tuv", "wxyz"};
    for (int i = 0; i < input.size(); ++i) {
      if (input[i] == '#') {
        numberMode = !numberMode;
        continue;
      }
      if (input[i] == '/') {
        continue;
      }
      if (numberMode) {
        result += input[i];
      } else {
        int cnt = 0;
        int key = input[i] - '0';
        if (key == 0) {
          result += keyboard[key];
          continue;
        }
        while (i + 1 < input.size() && input[i + 1] == input[i]) {
          ++i;
          ++cnt;
        }
        result += keyboard[key][cnt % keyboard[key].size()];
      }
    }
    return result;
  }
};

int main() {
  string input;
  getline(cin, input);
  Solution solu;
  cout << solu.GetResult(input) << endl;

  return 0;
}
